package modelo;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import modelo.MArbitro;
import modelo.MEquipo;
import modelo.MPartido;

public class MLiga {

	private ArrayList<MArbitro> arbitro = new ArrayList<MArbitro>();
	private ArrayList<MEquipo> equipo = new ArrayList<MEquipo>();
	private ArrayList<MPartido> partido = new ArrayList<MPartido>();
	private List<MArbitro> arbitrosLiga = new ArrayList<MArbitro>();
	private List<MEquipo> equiposLiga = new ArrayList<MEquipo>();
	private ArrayList<Integer> arbitroUsado = new ArrayList<Integer>();
	private ArrayList<Integer> semana1 = new ArrayList<Integer>();
	private ArrayList<Integer> semana2 = new ArrayList<Integer>();
	private ArrayList<Integer> equipoCasa1 = new ArrayList<Integer>();
	private ArrayList<Integer> equipoCasa2 = new ArrayList<Integer>();
	private ArrayList<Integer> equipoVisitante1 = new ArrayList<Integer>();
	private ArrayList<Integer> equipoVisitante2 = new ArrayList<Integer>();
	private int tamano;
	private int mitad;
	MPartido partidoL;
	MEquipo equipoL;

	public MLiga() {
		super();
	}

	public ArrayList<MArbitro> getArbitro() {
		return arbitro;
	}

	public void setArbitro(ArrayList<MArbitro> arbitro) {
		this.arbitro = arbitro;
	}

	public ArrayList<MEquipo> getEquipo() {
		return equipo;
	}

	public void setEquipo(ArrayList<MEquipo> equipo) {
		this.equipo = equipo;
	}

	public ArrayList<MPartido> getPartido() {
		return partido;
	}

	public void setPartido(ArrayList<MPartido> partido) {
		this.partido = partido;
	}

	public List<MArbitro> getArbitrosLiga() {
		return arbitrosLiga;
	}

	public void setArbitrosLiga(List<MArbitro> arbitrosLiga) {
		this.arbitrosLiga = arbitrosLiga;
	}

	public List<MEquipo> getEquiposLiga() {
		return equiposLiga;
	}

	public void setEquiposLiga(List<MEquipo> equiposLiga) {
		this.equiposLiga = equiposLiga;
	}

	public void registrarArbitros(MArbitro arbitro) {
		arbitrosLiga.add(arbitro);
	}

	public void registrarEquipos(MEquipo equipo) {
		equiposLiga.add(equipo);
	}

	public void registrarPartido(MPartido partidos) {
		partido.add(partidos);
	}

	public int aleatorioArbitro() {
		Random ran = new Random();
		return ran.nextInt(arbitrosLiga.size() + 1);
	}

	public int aleatorioJugador(int variable) {
		Random ran = new Random();
		return ran.nextInt(equiposLiga.get(variable).getJugadores().size() + 1);
	}

	public void setArbitroUsado(int i) {
		arbitroUsado.add(i);
	}

	public int aleatorioGoles() {
		Random ran = new Random();
		return ran.nextInt(5 + 1);
	}

	public int aleatorioEquipo() {
		Random ran = new Random();
		return ran.nextInt(equiposLiga.size() + 1);
	}

	public int GenerarPartido() {
		// buscamos el primer equipo,cantidad de goles y goleadores
		int codPartido = 01;
		String fechaPartido = "12/12/2011";
		int equipo1 = aleatorioEquipo();
		semana1.add(equipo1);
		equipoCasa1.add(equipo1);
		int variable = equipo1;
		System.out.println("tamano array equipos: " + equipo.size());
		System.out.println("tamano arraylist equipos: " + equiposLiga.size());
		String equipoCasa = equiposLiga.get(equipo1).getNombreEquipo();
		int golesE1 = aleatorioGoles();
		for (int i = 0; i < golesE1; i++) {
			int jugador = aleatorioJugador(variable);
			String nombreJugador = equipoL.getJugadores().get(jugador)
					.getNombre();
			partidoL.goleadoresCasa.add(nombreJugador);
		}
		// buscamos el contrincante validando que sean equipos diferentes
		int equipo2 = 0;
		do {
			equipo2 = aleatorioEquipo();
		} while (equipo1 == equipo2);
		semana1.add(equipo2);
		equipoVisitante1.add(equipo2);
		String equipoVisitante = equiposLiga.get(equipo2).getNombreEquipo();
		// identificamos la cantidad de goles y sus goleadores

		int golesE2 = aleatorioGoles();
		int variable2 = golesE2;
		for (int i = 0; i < golesE2; i++) {
			int jugador = aleatorioJugador(variable2);
			String nombreJugador = equipoL.getJugadores().get(jugador)
					.getNombre();
			partidoL.goleadoresVisitante.add(nombreJugador);
		}
		// ahora le asignamos un arbitro a nuestro primer partido/
		int arbitro1 = aleatorioArbitro();
		arbitroUsado.add(arbitro1);
		String arbitro = arbitrosLiga.get(arbitro1).getNombre();
		String marcadorFinal = String.valueOf(variable) + "-"
				+ String.valueOf(variable2);

		MPartido partido = new MPartido(codPartido, fechaPartido, equipoCasa,
				equipoVisitante, arbitro, partidoL.goleadoresCasa,
				partidoL.goleadoresVisitante, marcadorFinal);

		registrarPartido(partido);

		int equipo4 = 0;
		int equipo3 = 0;
		int contador = 0;
		tamano = equiposLiga.size();
		mitad = (equiposLiga.size() / 2);

		do {

			for (int j = 0; j < semana1.size(); j++) {

				do {
					equipo3 = aleatorioEquipo();
				} while (equipo3 == semana1.get(j));
			}
			semana1.add(equipo3);
			equipoCasa1.add(equipo3);
			equipoCasa = equiposLiga.get(equipo3).getNombreEquipo();
			int golesE3 = aleatorioGoles();
			int variable3 = equipo3;
			for (int i = 0; i < golesE3; i++) {
				int jugador = aleatorioJugador(variable3);
				String nombreJugador = equipoL.getJugadores().get(jugador)
						.getNombre();
				partidoL.goleadoresCasa.add(nombreJugador);
			}
			for (int j = 0; j < semana1.size(); j++) {
				do {
					equipo4 = aleatorioEquipo();
				} while (equipo4 == semana1.get(j));
			}
			semana1.add(equipo4);
			equipoVisitante1.add(equipo4);
			equipoVisitante = equiposLiga.get(equipo3).getNombreEquipo();
			// identificamos la cantidad de goles y sus goleadores
			int golesE4 = aleatorioGoles();
			int variable4 = equipo4;
			for (int i = 0; i < golesE4; i++) {
				int jugador = aleatorioJugador(variable4);
				String nombreJugador = equipoL.getJugadores().get(jugador)
						.getNombre();
				partidoL.goleadoresVisitante.add(nombreJugador);
			}
			// ahora le asignamos un arbitro verificando que sea su unico juego
			// durante la semana/
			int usado = 0;
			for (int i = 0; i < arbitroUsado.size(); i++) {

				do {
					usado = aleatorioArbitro();
				} while (usado == arbitroUsado.get(i));
			}
			arbitroUsado.add(usado);
			arbitro = arbitrosLiga.get(usado).getNombre();
			codPartido = codPartido + 1;
			fechaPartido = "13/12/2011";
			marcadorFinal = String.valueOf(variable3) + "-"
					+ String.valueOf(variable4);

			MPartido partido1 = new MPartido(codPartido, fechaPartido,
					equipoCasa, equipoVisitante, arbitro,
					partidoL.goleadoresCasa, partidoL.goleadoresVisitante,
					marcadorFinal);

			registrarPartido(partido1);
		} while (contador < mitad);

		int variable5 = 0;
		int variable6 = 0;
		int equipo5 = 0;
		int equipo6 = 0;
		for (int j = 0; j < semana1.size(); j++) {
			equipo5 = semana1.get(j);
			variable5 = equipo5;
			semana2.add(equipo5);
			equipoVisitante = equiposLiga.get(equipo5).getNombreEquipo();
			equipoVisitante2.add(equipo5);

			int golesE5 = aleatorioGoles();
			variable5 = equipo5;
			for (int i = 0; i < golesE5; i++) {
				int jugador = aleatorioJugador(variable5);
				String nombreJugador = equipoL.getJugadores().get(jugador)
						.getNombre();
				partidoL.goleadoresVisitante.add(nombreJugador);
			}
			j = j + 1;

			equipo6 = semana1.get(j);
			semana2.add(equipo6);
			equipoCasa = equiposLiga.get(equipo6).getNombreEquipo();
			equipoCasa2.add(equipo6);
			int golesE6 = aleatorioGoles();
			variable6 = equipo6;
			for (int i = 0; i < golesE6; i++) {
				int jugador = aleatorioJugador(variable6);
				String nombreJugador = equipoL.getJugadores().get(jugador)
						.getNombre();
				partidoL.goleadoresCasa.add(nombreJugador);
			}

			codPartido = codPartido + 1;
			fechaPartido = "20/12/2011";
			int usado = 0;
			for (int i = 0; i < arbitroUsado.size(); i++) {

				do {
					usado = aleatorioArbitro();
				} while (usado == arbitroUsado.get(i));
			}
			arbitroUsado.add(usado);
			arbitro = arbitrosLiga.get(usado).getNombre();
			marcadorFinal = String.valueOf(variable5) + "-"
					+ String.valueOf(variable6);

			MPartido partido1 = new MPartido(codPartido, fechaPartido,
					equipoCasa, equipoVisitante, arbitro,
					partidoL.goleadoresCasa, partidoL.goleadoresVisitante,
					marcadorFinal);

			registrarPartido(partido1);

		}

		return 0;

	}

	public void imprimir1() {
		for (int i = 0; i < equiposLiga.size(); i++) {
			System.out.println("codigoEquipo: "
					+ equiposLiga.get(i).getCodigoEquipo());
			System.out.println("nombreEquipo: "
					+ equiposLiga.get(i).getNombreEquipo());
			System.out.println("anoFundacion: "
					+ equiposLiga.get(i).getAnoFundacion());
			System.out.println("ciudad: " + equiposLiga.get(i).getCiudad());
			System.out.println("nombreEstadio: "
					+ equiposLiga.get(i).getNombreEstadio());
		}
	}

	public void imprimir2() {
		for (int i = 0; i < +arbitrosLiga.size(); i++) {
			System.out.println("cedula: " + arbitrosLiga.get(i).getCedula());
			System.out.println("nombre: " + arbitrosLiga.get(i).getNombre());
			System.out
					.println("apellido: " + arbitrosLiga.get(i).getApellido());
			System.out.println("fecha nacimiento: "
					+ arbitrosLiga.get(i).getFechaNacimiento());
			System.out.println("partidos arbitrados: "
					+ arbitrosLiga.get(i).getCantidadPartidosArbitrados());
		}
	}
}
